home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / text / print / Stylus300_src.lha / Stylus300rev5.S
Text File  |  1997-11-08  |  28KB  |  1,409 lines

  1. *******
  2. ******* Epson Stylus300 printerdriver
  3. *******
  4. ******* by Maurice van Wanum
  5. *******
  6.  
  7. NeedLibs    =0    ; 0/1 set to 1 if you need libs
  8.  
  9.     incdir        Include2.0:
  10.  
  11. *------ Included Files -----------------------------------------------
  12.  
  13.     INCLUDE     "exec/types.i"
  14.     include        "exec/exec_lib.i"
  15.     INCLUDE     "exec/nodes.i"
  16.     INCLUDE     "exec/strings.i"
  17.     INCLUDE     "devices/prtbase.i"
  18.  
  19. *------ Included Files -----------------------------------------------
  20.  
  21.     INCLUDE        "exec/lists.i"
  22.     INCLUDE        "exec/memory.i"
  23.     INCLUDE        "exec/ports.i"
  24.     INCLUDE        "exec/libraries.i"
  25.  
  26.     INCLUDE        "devices/printer.i"
  27.     INCLUDE        "devices/prtgfx.i"
  28.  
  29. _AbsExecBase    equ    4
  30.  
  31. vmi_8lpi=360/8        Vertical-Motion-Index = 360 p.inch / 8 lpi = 45 / line
  32. vmi_6lpi=360/6        60 per line
  33.  
  34.         MOVEQ    #-1,D0        ; show error for OpenLibrary()
  35.         RTS
  36.         DC.W    35        VERSION
  37.         DC.W    5        REVISION
  38. _PEDData:
  39.         DC.L    printerName
  40.         DC.L    _Init
  41.         DC.L    _Expunge
  42.         DC.L    _Open
  43.         DC.L    _Close
  44.         DC.B    PPC_COLORGFX    ; PrinterClass
  45.         DC.B    PCC_YMCB    ; ColorClass
  46.         DC.B    136        ; MaxColumns
  47.         DC.B    10        ; NumCharSets
  48.         DC.W    48        ; NumRows
  49.         DC.L    2880        ; MaxXDots
  50.         DC.L    3960        ; MaxYDots
  51.         DC.W    360        ; XDotsInch
  52.         DC.W    360        ; YDotsInch
  53.         DC.L    _CommandTable    ; Commands
  54.         DC.L    _DoSpecial
  55.         DC.L    _Render
  56.         DC.L    30        ; Timeout
  57.         DC.L    _ExtendedCharTable    ; 8BitChars
  58.         DC.L    0        ; PrintMode (reserve space)
  59.         DC.L    0        ; ptr to char conversion function
  60.  
  61. printerName:
  62.         DC.B    "Stylus300",0
  63.         even
  64.  
  65. ***** init.asm
  66.  
  67. **********************************************************************
  68. _Init:
  69.         MOVE.L    4(A7),_PD
  70.         LEA    _PEDData(PC),A0
  71.         MOVE.L    A0,_PED
  72.         MOVE.L    A6,-(A7)
  73.         MOVE.L    [_AbsExecBase].w,A6
  74.   if NeedLibs
  75.   
  76. *------ open the dos library
  77.         LEA    DLName(PC),A1
  78.         MOVEQ    #0,D0
  79.         CALLEXE OpenLibrary
  80.         MOVE.L    D0,_DOSBase
  81.         BEQ.s    initDLErr
  82.  
  83. *------ open the graphics library
  84.         LEA    GLName(PC),A1
  85.         MOVEQ    #0,D0
  86.         CALLEXE OpenLibrary
  87.         MOVE.L    D0,_GfxBase
  88.         BEQ.s    initGLErr
  89.  
  90. *------ open the intuition library
  91.         LEA    ILName(PC),A1
  92.         MOVEQ    #0,D0
  93.         CALLEXE OpenLibrary
  94.         MOVE.L    D0,_IntuitionBase
  95.         BEQ.s    initILErr
  96.   endif        
  97. *------ maak de tabellen
  98.         moveq    #78-1,d0
  99.         lea    _CommandTable,a0
  100.         lea    _CommandStrings,a1
  101.         bsr.s    VulTab
  102.  
  103.         moveq    #96-1,d0
  104.         lea    _ExtendedCharTable,a0
  105.         lea    _ExtendedStrings,a1
  106.         bsr.s    VulTab
  107. *- einde
  108.         MOVEQ    #0,D0
  109. pdiRts:
  110.         MOVE.L    (A7)+,A6
  111.         RTS
  112.  
  113. VulTab    move.l    a1,(a0)+
  114. vt_ext    tst.b    (a1)+
  115.     bne.s    vt_ext
  116.     dbra    d0,VulTab
  117.     rts
  118.  
  119.   if NeedLibs
  120.       
  121. initPAErr:
  122.         MOVE.L    _IntuitionBase,A1
  123.         CALLEXE    CloseLibrary
  124.  
  125. initILErr:
  126.         MOVE.L    _GfxBase,A1
  127.         CALLEXE    CloseLibrary
  128.  
  129. initGLErr:
  130.         MOVE.L    _DOSBase,A1
  131.         CALLEXE    CloseLibrary
  132. initDLErr:
  133.         MOVEQ    #-1,D0
  134.         BRA.S    pdiRts
  135.  
  136. ILName:        DC.B    'intuition.library',0
  137. DLName:        DC.B    'dos.library',0
  138. GLName:        DC.B    'graphics.library',0
  139.  
  140.   endif
  141.     even
  142.  
  143.  
  144. *---------------------------------------------------------------------
  145. _Expunge:
  146.   if NeedLibs
  147.         MOVE.L    _IntuitionBase,A1
  148.         LINKEXE    CloseLibrary
  149.  
  150.         MOVE.L    _GfxBase,A1
  151.         CALLEXE    CloseLibrary
  152.  
  153.         MOVE.L    _DOSBase,A1
  154.         CALLEXE    CloseLibrary
  155.   endif
  156.  
  157. *---------------------------------------------------------------------
  158. _Open:
  159.         MOVEQ    #0,D0
  160.         RTS
  161.  
  162.  
  163.  
  164. *---------------------------------------------------------------------
  165. _Close:
  166.         MOVEQ    #0,D0
  167.         RTS
  168.  
  169.  
  170. *** dospecial
  171. ** DoSpecial(command, outputBuffer, vline, currentVMI, crlfFlag, Parms)
  172. ** UWORD *command;    $18
  173. ** char outputBuffer[];    $1c
  174. ** BYTE *vline;        $20
  175. ** BYTE *currentVMI;    $24
  176. ** BYTE *crlfFlag;    $28
  177. ** UBYTE Parms[];    $2c
  178.  
  179. _DoSpecial
  180. LB_7278    MOVEM.L    D6/D7/A2/A3/A5,-(A7)
  181.     MOVE.L    $0018(A7),A3        *command
  182.     MOVEQ    #$00,D7        lengte van string
  183.     MOVEQ    #$00,D6
  184.     MOVEQ    #aRIN,D0
  185.     CMP.W    (A3),D0
  186.     MOVE.L    $001C(A7),A5        outbuff
  187.     MOVE.L    $0020(A7),A2        *vline
  188.     BNE    LB_732C
  189. * init printer *
  190.     moveq    #InitStringlen,d0    lengte
  191.     LEA    InitString,A0        initstring
  192.     lea    (a5,d7.l),a1
  193.     add.l    d0,d7
  194.     subq    #1,d0
  195. LB_7294    MOVE.B    (A0)+,(a1)+
  196.     dbf    d0,LB_7294
  197.     
  198.     MOVE.L    _PD,A0            PD
  199.     CMP.W    #LETTER,pd_Preferences+pf_PrintQuality(A0)
  200.     BNE.B    LB_72BC
  201.     MOVEQ    #$01,D0
  202.     MOVE.B    D0,5(A5)        LQ
  203. LB_72BC    MOVE.L    $0024(A7),A0
  204.     MOVE.B    #vmi_6lpi,(A0)        currentVMI = 30
  205.     MOVE.L    _PD,A0
  206.     CMP.W    #EIGHT_LPI,pd_Preferences+pf_PrintSpacing(A0)
  207.     BNE.B    LB_72E0
  208.     MOVE.B    #'0',9(A5)        8LPI
  209.     MOVE.L    $0024(A7),A0
  210.     MOVE.B    #vmi_8lpi,(A0)        currentVMI = 22
  211. LB_72E0    MOVE.L    _PD,A0            PD
  212.     MOVE.W    pd_Preferences+pf_PrintPitch(A0),D0
  213.     CMP.W    #ELITE,D0
  214.     BNE.B    LB_72F8
  215.     Or.B    #1,2(A5)        elite
  216.     BRA.B    LB_730A
  217. LB_72F8    CMP.W    #FINE,D0
  218.     BNE.B    LB_730A
  219.     OR.B    #4,2(A5)
  220. LB_730A    MOVE.L    _PD,A1        PD
  221.     MOVE.W    $0A5C(A1),D0        leftmargin
  222.     MOVE.L    $002C(A7),A0        Parms[]
  223.     MOVE.B    D0,(A0)
  224. ;    MOVE.L    _PD,A1        PD
  225.     MOVE.W    $0A5E(A1),D0        rightmargin
  226.     MOVE.B    D0,$0001(A0)
  227.     MOVEQ    #aSLRM,D0
  228.     MOVE.W    D0,(A3)
  229.  
  230. LB_732C    MOVEQ    #aCAM,D0
  231.     CMP.W    (A3),D0
  232.     BNE.B    LB_7388
  233. * kantlijnen wissen *
  234.     MOVEQ    #$30,D0
  235.     MOVE.L    _PD,A0
  236.     CMP.W    $0A68(A0),D0
  237.     BNE.B    LB_7346
  238.     MOVEQ    #$44,D0
  239.     ADD.L    D0,D0
  240. ;    CMPI.W    #$7050,D0
  241.     dc.w    $0c40    
  242. LB_7346    moveq    #$50,d0
  243.     MOVE.L    D0,D1
  244.     MOVE.W    $0A56(A0),D0        printpitch
  245.     BNE.B    LB_735A
  246.     MOVE.L    D1,D0
  247.     ASL.L    #2,D0
  248.     ADD.L    D1,D0
  249.     ADD.L    D0,D0
  250.     BRA.B    LB_7370
  251. LB_735A    CMPI.W    #$0400,D0
  252.     BNE.B    LB_736A
  253.     MOVE.L    D1,D0
  254.     ASL.L    #2,D0
  255.     SUB.L    D1,D0
  256.     ASL.L    #2,D0
  257.     BRA.B    LB_7370
  258. LB_736A    MOVE.L    D1,D0
  259.     ASL.L    #4,D0
  260.     ADD.L    D1,D0
  261. LB_7370    MOVEQ    #$0A,D1
  262.     BSR.W    LB_7B8C
  263.     MOVE.L    $002C(A7),A0
  264.     MOVE.B    D0,$0001(A0)
  265.     MOVEQ    #$01,D0
  266.     MOVE.B    D0,(A0)
  267.     MOVEQ    #$00,D6
  268.     MOVEQ    #$41,D1
  269.     MOVE.W    D1,(A3)
  270.  
  271. LB_7388    MOVEQ    #aSLRM,D0        zet marges
  272.     CMP.W    (A3),D0
  273.     BNE.B    LB_73DA
  274.     MOVE.L    $002C(A7),A0        Parms
  275.     MOVE.B    (A0),D0
  276.     BNE.B    LB_73AA
  277.     CLR.B    LB_3773
  278.     BRA.B    LB_73B2
  279. LB_73AA    SUBQ.B    #1,D0
  280.     MOVE.B    D0,initmarge+2        Linkermarge
  281. LB_73B2    MOVE.B    $0001(A0),D0
  282.     MOVE.B    D0,initmarge+5        rechtermarge
  283. LB_73BC
  284.     lea    (a5,d7.l),a1
  285.     LEA    initmarge,A0        zetmargestring
  286.     MOVEQ    #initmargelen,D0    lengte
  287.     add.l    d0,d7
  288.     subq    #1,d0
  289. .1    move.b    (a0)+,(a1)+
  290.     dbf    d0,.1
  291.     MOVE.L    D7,D0
  292.     BRA.W    LB_7520            return(lengte)
  293.     
  294. LB_73DA    MOVEQ    #aPLU,D0
  295.     CMP.W    (A3),D0
  296.     BNE.B    LB_7406
  297. * partial line up *
  298.     TST.B    (A2)        vline
  299.     BNE.B    LB_73F0
  300.     MOVEQ    #$01,D0
  301.     MOVE.B    D0,(A2)        vline=1
  302.     moveq    #aSUS2,D0        command=bovenindex aan
  303.     move    d0,(a3)    
  304.     bra    LB_751E
  305.  
  306. LB_73F0    MOVE.B    (A2),D0
  307.     BPL.B    LB_7400
  308.     MOVEQ    #$00,D1
  309.     MOVE.B    D1,(A2)        vline=0
  310.     MOVEQ    #aSUS3,D0        command=onderindex uit
  311.     MOVE.W    D0,(A3)
  312.     BRA    LB_751E
  313.  
  314. LB_7400    MOVEQ    #-$01,D0    niet uitvoeren
  315.     BRA    LB_7520
  316.     
  317. LB_7406    MOVEQ    #aPLD,D0
  318.     CMP.W    (A3),D0
  319.     BNE.B    LB_7430
  320. * partial line down *
  321.     TST.B    (A2)
  322.     BNE.B    LB_741C
  323.     MOVEQ    #-$01,D0
  324.     MOVE.B    D0,(A2)        vline=-1
  325.     MOVEQ    #aSUS4,D1
  326.     MOVE.W    D1,(A3)        command=subscript aan
  327.     BRA    LB_751E
  328.  
  329. LB_741C    MOVE.B    (A2),D0
  330.     BLE.B    LB_742A
  331.     CLR.B    (A2)
  332.     MOVEQ    #aSUS1,D0
  333.     MOVE.W    D0,(A3)        command=superscript uit
  334.     BRA    LB_751E
  335. LB_742A    MOVEQ    #-$01,D0    skippen
  336.     BRA.W    LB_7520
  337.     
  338. LB_7430    MOVE.W    (A3),D0
  339.     MOVEQ    #aSUS0,D1    normaliseren
  340.     CMP.W    D1,D0
  341.     BNE.B    LB_743A
  342.     CLR.B    (A2)        vline=0
  343.     
  344. LB_743A    MOVE.W    (A3),D0
  345.     MOVEQ    #aSUS1,D1
  346.     CMP.W    D1,D0
  347.     BNE.B    LB_7444
  348.     CLR.B    (A2)        vline=0
  349.  
  350. LB_7444    MOVE.W    (A3),D0
  351.     MOVEQ    #aSUS2,D1
  352.     CMP.W    D1,D0
  353.     BNE.B    LB_7450
  354.     MOVE.B    #$01,(A2)    vline=1
  355.  
  356. LB_7450    MOVE.W    (A3),D0
  357.     MOVEQ    #aSUS3,D1
  358.     CMP.W    D1,D0
  359.     BNE.B    LB_745A
  360.     CLR.B    (A2)        vline=0
  361.  
  362. LB_745A    MOVE.W    (A3),D0
  363.     MOVEQ    #aSUS4,D1
  364.     CMP.W    D1,D0
  365.     BNE.B    LB_7464
  366.     ST    (A2)        vline=-1
  367.  
  368. LB_7464    MOVE.W    (A3),D0
  369.     MOVEQ    #aVERP0,D1
  370.     CMP.W    D1,D0
  371.     MOVE.L    $0024(A7),A0
  372.     BNE.B    LB_7474
  373.     MOVEQ    #vmi_8lpi,D1
  374.     MOVE.B    D1,(A0)        currentVMI=27
  375.  
  376. LB_7474    MOVE.W    (A3),D0
  377.     MOVEQ    #aVERP1,D1
  378.     CMP.W    D1,D0
  379.     BNE.B    LB_7480
  380.     MOVE.L    $0024(A7),A0
  381.     MOVEQ    #vmi_6lpi,D1
  382.     MOVE.B    D1,(A0)        currentVMI=36
  383.  
  384. LB_7480    MOVE.W    (A3),D0
  385.     MOVEQ    #aRI,D1
  386.     CMP.W    D1,D0
  387.     BNE.B    LB_74C0
  388. * omgekeerde regelopschuiving *
  389.     MOVEQ    #$1B,D1
  390.     MOVE.B    D1,$00(A5,D7.L)
  391.     MOVE.B    #'j',$01(A5,D7.L)
  392.     MOVE.B    (A0),$02(A5,D7.L)
  393.     MOVE.L    D7,D0
  394.     ADDQ.L    #3,D0
  395.     BRA.W    LB_7520
  396.  
  397. LB_74C0    MOVE.W    (A3),D0
  398.     MOVEQ    #aSFC,D1
  399.     CMP.W    D1,D0
  400.     BNE.B    LB_750E
  401. * zet voorgrondkleur *
  402.     MOVE.L    $002C(A7),A0
  403.     MOVEQ    #39,D0
  404.     CMP.B    (A0),D0
  405.     BNE.B    LB_74D6
  406.     MOVEQ    #30,D0
  407.     MOVE.B    D0,(A0)
  408. LB_74D6    MOVE.B    (A0),D0
  409.     MOVEQ    #37,D1
  410.     CMP.B    D1,D0
  411.     BHI.W    LB_751E
  412.     MOVEQ    #$1B,D0
  413.     MOVE.B    D0,$00(A5,D7.L)
  414.     MOVE.B    #'r',$01(A5,D7.L)
  415.     MOVEQ    #$00,D1
  416.     MOVE.B    (A0),D1
  417.     LEA    ISOColor-30,A0
  418.     MOVE.B    $00(A0,D1.L),$02(A5,D7.L)
  419.     MOVE.L    D7,D0
  420.     ADDQ.L    #3,D0
  421.     BRA.W    LB_7520
  422. LB_750E
  423.     moveq    #aSLPP,D0
  424.     CMP    (a3),d0
  425.     bne    ch_aSTBM
  426. * zet papierlengte *
  427.     MOVE.L    $002C(A7),A0        Parms
  428.     MOVE.B    (A0),D0        lengte in regels = 1-127
  429.     BNE.s    slpok1
  430.     moveq    #1,d0
  431. slpok1    bpl.s    slpok2
  432.     moveq    #127,d0
  433. slpok2    lea    (a5,d7.l),a1
  434.     move.b    #27,(a1)+
  435.     move.b    #'C',(a1)+
  436.     move.b    d0,(a1)+
  437.     addq.l    #3,d7
  438.     move.l    d7,d0
  439.     BRA.W    LB_7520            return(lengte)
  440.  
  441. ch_aSTBM
  442.     moveq    #aSTBM,D0
  443.     CMP    (A3),D0
  444.     BNE    LB_751E
  445. * zet onder en bovenmarges *
  446.     lea    (a5,d7.l),a1
  447.     lea    initTmarg,a0
  448.     addq.l    #5,d7
  449.     moveq    #5-1,d0
  450. .1    move.b    (a0)+,(a1)+
  451.     dbf    d0,.1
  452.     moveq    #0,d0
  453.     MOVE.L    $002C(A7),A0        Parms
  454.     MOVE.B    (A0),D0            regels van top
  455.     bne.s    bovok
  456.     moveq    #1,d0            1 is minimum
  457. bovok    MOVE.L    $0024(A7),A0
  458.     moveq    #0,d1
  459.     move.b    (a0),d1            currentVMI
  460.     mulu    d1,d0
  461.     move.b    d0,(a1)+
  462.     rol.w    #8,d0
  463.     move.b    d0,(a1)+        bovenmarge
  464.     MOVE.L    $002C(A7),A0        Parms
  465.     moveq    #0,d0
  466.     MOVE.B    1(A0),D0        lengte in regels
  467.     bne.s    ondok
  468.     move.l    _PD,a0
  469.     move.w    pd_Preferences+pf_PaperLength(a0),d0
  470. ondok    mulu    d1,d0
  471.     move.b    d0,(a1)+
  472.     rol.w    #8,d0
  473.     move.b    d0,(a1)+
  474.     addq    #4,d7
  475.     move.l    d7,d0
  476.     bra    LB_7520
  477. LB_751E    MOVEQ    #$00,D0
  478. LB_7520    MOVEM.L    (A7)+,D6/D7/A2/A3/A5
  479.     RTS    
  480.  
  481. **** render
  482. ** ct
  483. ** x
  484. ** y
  485. ** status
  486.  
  487. _Render        
  488. LB_7528    SUBA.W    #$000C,A7
  489.     MOVEM.L    D2-D6/A2/A3/A5/A6,-(A7)
  490.     LEA    $0038(A7),A6
  491.     MOVE.L    (A6)+,D6        x
  492.     MOVE.L    $0034(A7),D3        ct
  493.     MOVE.L    (A6)+,D5        y
  494.     MOVE.L    (A6)+,D0        status
  495.     CMPI.L    #6,D0
  496.     BCC.W    LB_7920            geen mogelijkheid ->
  497.     ADD.W    D0,D0
  498.     add.W    jtab(PC,D0.W),D0    springtabel
  499.     JMP    jtab(PC,D0.W)        spring
  500.  
  501. jtab    dr.w    MasterInit,SDEnR
  502.     dr.w    DumpBuffer,ClearEnInit
  503.     dr.w    CloseDown,PreMasterInit
  504.  
  505. **** MASTER INIT (case 0)
  506.  
  507. MasterInit
  508. LB_755E    MOVE.L    D6,D0        x
  509.     mulu    BytesPerRow,d0
  510.     MOVE.W    D0,RowSize    RowSize
  511.     ADDI.W    #$0009,D0     +Numcommands
  512.     MOVE.W    D0,ColorSize    ColorSize
  513.     MOVEQ    #$02,D1
  514.     MOVE.L    _PD,A0
  515.     CMP.W    $0A64(A0),D1    kleur ??
  516.     BNE.B    LB_75C4        nee ->
  517.     MOVEQ    #$04,D2            kleurenbuffers
  518.     MOVE.L    D0,D3
  519.     ADD.W    D3,D3
  520.     ADD.W    D0,D3        ColorSize*3
  521.     MOVE.W    D3,colors    ;LB_37F8    colors[0] / black
  522.     CLR.W    colors+2    ;LB_37FA    colors[1] / Yellow
  523.     MOVE.W    D0,colors+4    ;LB_37FC    colors[2] / Magenta
  524.     MOVE.L    D0,D3
  525.     ADD.W    D3,D3
  526.     MOVE.W    D3,colors+6    ;LB_37FE    colors[3] /Cyan
  527.     MOVE.W    D2,colorcodes    ;LB_3800    colorcodes[0] / yellow
  528.     MOVEQ    #$01,D3
  529.     MOVE.W    D3,colorcodes+2    ;LB_3802    colorcodes[1] / magenta
  530.     MOVE.W    D1,colorcodes+4    ;LB_3804    colorcodes[2] / cyan
  531.     CLR.W    colorcodes+6    ;LB_3806    colorcodes[3] / black
  532.     BRA.B    LB_75D2
  533.     
  534. LB_75C4    MOVEQ    #$01,D2        Z/W
  535.     CLR.W    colors        ;LB_37F8    colors[0]=0
  536.     CLR.W    colorcodes    ;LB_3800    colorcodes[0]=0
  537. LB_75D2    MOVE.W    D2,NumColorBufs
  538.     MULU.W    D2,D0        buffsize * numbufs
  539.     ADDQ.W    #4,D0
  540.     MOVE.L    D0,D2
  541.     ADD.W    D2,D2        totalbuffsize = *2
  542.     MOVEQ    #$00,D1
  543.     MOVE.W    D2,D1
  544.     MOVE.W    D0,BufSize    ;LB_37F0    bufsize
  545.     MOVE.L    D1,D0
  546.     MOVEQ    #$01,D1
  547.     MOVE.L    $0004.W,A6
  548.     JSR    -$00C6(A6)        AllocMem
  549.     MOVE.L    _PD,A0
  550.     MOVE.L    D0,$0060(A0)    printbuff
  551.     MOVE.W    D2,TotalBufSize        ;LB_37F2    totalbuffsize
  552.     TST.L    D0
  553.     BNE.B    LB_7610
  554.     MOVEQ    #$07,D5
  555.     BRA.W    LB_7920        err=nomem
  556.     
  557. LB_7610    MOVE.W    #$0008,dataoffset    dataoffset
  558.     MOVE.B    #'P',LB_37A1    10cpi
  559.     MOVE.B    #$12,LB_37A2    condensed off
  560.     CLR.B    LB_37A8        lmarge=0
  561.     MOVEQ    #$30,D0
  562.     CMP.W    $0A68(A0),D0    papersize
  563.     BNE.B    LB_763C
  564.     MOVEQ    #$44,D0
  565.     ADD.L    D0,D0        136 koloms
  566.     dc.w    $0c40
  567. ;    CMPI.W    #$7050,D0
  568. LB_763C    MOVEQ    #$50,d0        80 koloms
  569.     MOVE.B    D0,LB_37AB    rmarge
  570.     MOVE.B    #'1',LB_37AF    uni-direc
  571.     MOVE.L    $0064(A0),A0
  572.     PEA    [Startbuflen].W    
  573.     PEA    Startbuf    initstring
  574.     JSR    (A0)        write
  575.     ADDQ.W    #8,A7
  576.     MOVE.L    D0,D5        return(err)
  577.     BRA.W    LB_7920
  578.     
  579. **** SCALE, DITHER EN RENDER (case 1)
  580. SDEnR
  581. LB_7664    MOVE.L    _PD,A1
  582.     MOVE.L    $0060(A1),A0        printbuf
  583.     MOVEQ    #$00,D1
  584.     MOVE.W    D5,D1            y
  585.     MOVEQ    #$00,D0
  586.     MOVE.W    dataoffset,D0
  587.     PEA    colors            ;LB_37F8
  588.     ADDA.L    D0,A0
  589.     MOVE.L    A0,-(A7)        ptr
  590.     MOVE.L    D1,-(A7)        y
  591.     MOVE.L    D3,-(A7)        prtinfo
  592.     BSR.W    _Transfer        transfer
  593.     LEA    $0010(A7),A7
  594.     MOVEQ    #$00,D5            noerr
  595.     BRA.W    LB_7920            return(d5)
  596.  
  597. **** DUMP BUFFER (case 2)
  598. DumpBuffer
  599. LB_7696    MOVE.L    _PD,A1
  600.     MOVE.L    $0060(A1),A5        printbuffer
  601.     MOVEQ    #$00,D0
  602.     MOVE.W    dataoffset,D0        offset
  603.     ADDA.L    D0,A5
  604.     MOVE.L    A5,A3
  605.     SUBQ.L    #8,A3            ptr - numstartcmd
  606.     MOVEQ    #$00,D6
  607.     MOVE.L    A3,A0
  608.     MOVEQ    #$00,D3
  609.     LEA    colorcodes,A2        LB_3800
  610.     MOVE.L    A0,$0028(A7)
  611.     BRA.W    LB_77A6
  612.     
  613. LB_76C2    MOVE.L    A5,A0
  614.     MOVEQ    #$00,D4
  615.     MOVE.W    RowSize,D4
  616.     ADDA.L    D4,A0
  617. *** haal nullen weg
  618.     subq    #1,d4
  619. .1    tst.b    -(a0)
  620.     dbne    d4,.1    
  621. LB_76E8
  622.     move.l    a0,$2c(sp)
  623.     addq.w    #1,d4
  624.     TST.L    D4
  625.     BEQ.W    LB_7786            lege regel ->
  626.  
  627.     MOVE.L    A5,A0
  628.     SUBQ.L    #8,A0
  629.     LEA    -$0007(A5),A1
  630.     LEA    $002C(A7),A6
  631.     MOVE.L    A1,(A6)        zet ptr
  632.     MOVEQ    #$1B,D0            ESC
  633.     MOVE.B    D0,(A0)
  634.     MOVE.L    (A6),A1
  635.     ADDQ.L    #1,(A6)
  636.     MOVE.B    #$72,(A1)        'r'
  637.     MOVE.L    (A6)+,A1
  638.     LEA    $002C(A7),A6
  639.     ADDQ.L    #1,(A6)
  640.     MOVE.W    (A2),D1
  641.     MOVE.B    D1,(A1)            zet kleurcode
  642.     MOVE.L    (A6),A1
  643.     ADDQ.L    #1,(A6)
  644.     MOVE.B    D0,(A1)            ESC
  645.     MOVE.L    (A6)+,A1
  646.     LEA    $002C(A7),A6
  647.     ADDQ.L    #1,(A6)
  648.     MOVE.B    #$2A,(A1)        '*'
  649.     MOVE.L    (A6),A1
  650.     ADDQ.L    #1,(A6)
  651.     MOVE.W    densitycode,D0        density-code
  652.     MOVE.B    D0,(A1)
  653.     MOVE.L    (A6)+,A1
  654.     ADDQ.L    #1,$002C(A7)
  655.     MOVE.L    D4,D0            xsize
  656.     moveq    #0,d1
  657.     move.w    BytesPerRow,d1
  658.     add.l    d1,d0
  659.     subq.l    #1,d0
  660.     BSR.W    LB_7B8C            delen door #bytes/row
  661.     MOVE.L    D0,D1
  662.     MOVE.B    D1,(A1)            Lo-byte
  663.     MOVE.L    $002C(A7),A1
  664.     ADDQ.L    #1,$002C(A7)
  665.     ASR.L    #8,D1
  666.     MOVE.B    D1,(A1)            Hi-byte
  667.     MOVE.L    D0,D4
  668.     mulu    BytesPerRow,d4
  669.     MOVE.B    #$0D,$00(A5,D4.L)    CR
  670.     MOVEQ    #$09,D0
  671.     ADD.L    D0,D4            +9
  672.     TST.L    D6
  673.     BEQ.B    LB_7784            geen transfer nodig
  674.     MOVE.L    A0,$002C(A7)
  675. LB_7774
  676.     move.l    a3,a1
  677.     move.l    d4,d0
  678.     move.l    4.w,a6
  679.     CALLEXEC    CopyMem
  680. LB_7784    ADDA.L    D4,A3    
  681. LB_7786    MOVEQ    #$00,D0
  682.     MOVE.W    RowSize,D0
  683.     MOVEQ    #$09,D1
  684.     ADD.L    D1,D0            +9
  685.     CMP.L    D0,D4
  686.     BEQ.B    LB_7798
  687.     MOVEQ    #$01,D6            transfer nodig
  688. LB_7798    ADDQ.L    #1,D3
  689.     MOVEQ    #$00,D0
  690.     MOVE.W    ColorSize,D0
  691.     ADDQ.L    #2,A2
  692.     ADDA.L    D0,A5
  693.  
  694. LB_77A6    MOVEQ    #$00,D0
  695.     MOVE.W    NumColorBufs,D0
  696.     CMP.L    D0,D3
  697.     BLT.W    LB_76C2
  698.     LEA    (A3),A6
  699.     MOVE.B    #$0D,(A6)+        CR
  700.     MOVE.B    #$1B,(A6)+        ESC
  701.     MOVE.B    #$4A,(A6)+        J
  702.     MOVE.L    D5,D0
  703.     cmp    #3,BytesPerRow
  704.     beq.s    b3pr            3 bytes/row -> niet delen
  705.     tst    d0
  706.     BPL.B    LB_77C8
  707.     ADDQ.L    #1,D0
  708. LB_77C8
  709.     ASR.L    #1,D0            ypos/2
  710. b3pr    MOVE.B    D0,$0003(A3)        opslaan
  711.     MOVE.L    _PD,A1
  712.     MOVE.L    $0064(A1),A0        pd_write
  713.     LEA    $0004(A3),A1
  714.     MOVE.L    A1,D0
  715.     SUB.L    $0028(A7),D0        ptr2-ptr2start
  716.     MOVE.L    D0,-(A7)        omvang
  717.     MOVE.L    $002C(A7),-(A7)        ptr2start
  718.     JSR    (A0)            schrijf
  719.     ADDQ.W    #8,A7
  720.     MOVE.L    D0,D5            errorcode
  721.     BNE.W    LB_7920
  722.     MOVEQ    #$08,D0
  723.     CMP.W    dataoffset,D0
  724.     BNE.B    LB_7806
  725.     MOVEQ    #$00,D0
  726.     MOVE.W    BufSize,D0
  727.     DC.W    $0C40
  728. LB_7806    MOVEQ    #0,D0
  729.     ADDQ.L    #8,D0
  730.     MOVE.W    D0,dataoffset
  731.     BRA.W    LB_7920
  732.     
  733. **** CLEAR EN INIT (case 3)
  734. ClearEnInit
  735. LB_7814    MOVE.L    _PD,A1
  736.     MOVE.L    $0060(A1),A0
  737.     MOVEQ    #$00,D0
  738.     MOVE.W    dataoffset,D0
  739.     ADDA.L    D0,A0
  740.     MOVE.L    A0,$002C(A7)
  741.     MOVEQ    #$00,D0
  742.     MOVE.W    BufSize,D0
  743.     MOVEQ    #$0D,D1
  744.     SUB.L    D1,D0
  745. LB_7838    MOVE.L    $002C(A7),A0
  746.     ADDQ.L    #1,$002C(A7)
  747.     CLR.B    (A0)
  748.     SUBQ.L    #1,D0
  749.     BNE.B    LB_7838
  750.     MOVEQ    #$00,D5
  751.     BRA.W    LB_7920
  752.  
  753. **** CLOSE DOWN (case 4)
  754. CloseDown
  755. LB_784C    MOVEQ    #$00,D5
  756.     MOVE.L    D3,D0
  757.     SUBQ.L    #1,D0
  758.     BEQ.B    LB_78D0
  759.     MOVE.L    _PD,A0
  760.     MOVE.W    $0A56(A0),D0
  761.     CMPI.W    #ELITE,D0
  762.     BNE.B    LB_786E
  763.     MOVE.B    #'M',LB_37A1
  764.     BRA.B    LB_787C
  765. LB_786E    CMPI.W    #FINE,D0
  766.     BNE.B    LB_787C
  767.     MOVE.B    #$0F,LB_37A2
  768. LB_787C    MOVEQ    #$00,D0
  769.     MOVE.W    $0A5C(A0),D0
  770.     SUBQ.L    #1,D0
  771.     MOVE.B    D0,LB_37A8
  772.     MOVE.W    $0A5E(A0),D0
  773.     MOVE.B    D0,LB_37AB
  774.     MOVE.B    #$30,LB_37AF
  775.     MOVE.L    $0064(A0),A0
  776.     PEA    [Startbuflen].W
  777.     PEA    Startbuf
  778.     JSR    (A0)
  779.     MOVE.L    D0,D5
  780.     BTST    #$0B,D6
  781.     ADDQ.W    #8,A7
  782.     BNE.B    LB_78D0
  783.     MOVE.L    _PD,A1
  784.     MOVE.L    $0064(A1),A0
  785.     PEA    1.W
  786.     PEA    formfeed
  787.     JSR    (A0)
  788.     ADDQ.W    #8,A7
  789.     MOVE.L    D0,D5
  790. LB_78D0    MOVE.L    _PD,A1
  791.     MOVE.L    $0068(A1),A0
  792.     JSR    (A0)
  793.     MOVE.L    _PD,A0
  794.     MOVE.L    $0060(A0),D0
  795.     BEQ.B    LB_7920
  796.     MOVEQ    #$00,D1
  797.     MOVE.W    TotalBufSize,D1
  798.     MOVE.L    D0,A1
  799.     MOVE.L    D1,D0
  800.     MOVE.L    $0004.W,A6
  801.     JSR    -$00D2(A6)
  802.     BRA.B    LB_7920
  803.  
  804. **** PRE-MASTER INIT (case 5)
  805. PreMasterInit
  806. LB_78FE
  807.     ANDI.L    #$00000700,D6
  808.     MOVE.L    D6,-(A7)
  809.     BSR.W    LB_7B24            density.c
  810.     ADDQ.W    #4,A7
  811.     MOVEQ    #$00,D5            Err=noerr
  812.     MOVE.W    D0,densitycode        Density
  813.     move.l    _PED,a0
  814.     move    BytesPerRow,d0
  815.     asl.w    #3,d0
  816.     move    d0,ped_NumRows(a0)
  817.  
  818. LB_7920    MOVE.L    D5,D0            return err
  819.     MOVEM.L    (A7)+,D2-D6/A2/A3/A5/A6
  820.     ADDA.W    #$000C,A7
  821.     RTS    
  822.  
  823.  
  824. _Transfer:
  825. ; Transfer(PInfo, y, ptr, colors)
  826. ; struct PrtInfo *PInfo     4-7
  827. ; UWORD y;            8-11
  828. ; UBYTE *ptr;            12-15
  829. ; UWORD *colors;        16-19
  830. ;
  831.  
  832.     movem.l d2-d6/a2-a4,-(sp)    ;save regs used
  833.  
  834.     movea.l 36(sp),a0        ;a0 = PInfo
  835.     move.l    40(sp),d0        ;d0 = y
  836.     movea.l 44(sp),a1        ;a1 = ptr
  837.     movea.l 48(sp),a2        ;a2 = colors
  838.  
  839.     moveq.l #3,d2
  840.     and.w    d0,d2            ;d2 = y & 3
  841.     lsl.w    #2,d2            ;d2 = (y & 3) << 2
  842.     movea.l pi_dmatrix(a0),a3    ;a3 = dmatrix
  843.     adda.l    d2,a3            ;a3 = dmatrix + ((y & 3) << 2)
  844.  
  845.     movea.l _PED,a4         ;a4 = ptr to PED
  846.     divu.w    ped_NumRows(a4),d0    ;d0 = y / NumRows
  847.     swap.w    d0            ;d0 = y % NumRows
  848.     move.w    d0,d6
  849.     not.b    d6            ;d6 = bit to set
  850.     asr.w    #3,d0            ;d0 = ymod / 8
  851.     adda.w    d0,a1            ;ptr += ymod / 8
  852.  
  853.     movea.l _PD,a4            ;a4 = ptr to PD
  854.     cmpi.w    #SHADE_COLOR,pd_Preferences+pf_PrintShade(a4)    ;color dump?
  855.     bne    not_color        ;no
  856.  
  857. color:
  858. ; a0 - PInfo
  859. ; a1 - ptr
  860. ; a2 - colors
  861. ; a3 - dmatrix ptr
  862. ; d0 - y
  863. ; d6 - bit to set
  864.  
  865. *** NOTE : This section is _NOT_ tested (MVW)
  866.  
  867.     movem.l d7/a5-a6,-(sp)        ;save regs used
  868.  
  869. ** Set #bytes/kolom on stack (MVW)
  870.     move.l    _PED,a4
  871.     move.w    BytesPerRow,d0        ;d0 = numrows/8
  872.     move    d0,-(SP)
  873.  
  874.     movea.l a1,a4
  875.     movea.l a1,a5
  876.     movea.l a1,a6
  877.     adda.w    (a2)+,a1        ;a1 = ptr + colors[0] (bptr)
  878.     adda.w    (a2)+,a4        ;a4 = ptr + colors[1] (yptr)
  879.     adda.w    (a2)+,a5        ;a5 = ptr + colors[2] (mptr)
  880.     adda.w    (a2)+,a6        ;a6 = ptr + colors[3] (cptr)
  881.  
  882.  
  883.     movea.l pi_ColorInt(a0),a2    ;a2 = ColorInt ptr
  884.     move.w    pi_width(a0),width    ;# of pixels to do
  885.     move.w    pi_xpos(a0),d2        ;d2 = x
  886.     movea.l pi_ScaleX(a0),a0    ;a0 = ScaleX (sxptr)
  887.     mulu    d2,d0            ;d0 = x * #bytes/kolom (MVW)
  888.     move.w    d6,d7            ;d7 = bit to set
  889.  
  890. ; a0 - sxptr
  891. ; a1 - bptr
  892. ; a2 - ColorInt ptr
  893. ; a3 - dmatrix ptr
  894. ; a4 - yptr
  895. ; a5 - mptr
  896. ; a6 - cptr
  897. ; d0 - byte to set (x3 (x * 3))
  898. ; d1 - Black
  899. ; d2 - x
  900. ; d3 - dvalue (dmatrix[x & 3])
  901. ; d4 - Yellow
  902. ; d5 - Magenta
  903. ; d6 - Cyan
  904. ; d7 - bit to set
  905.  
  906. cwidth_loop:
  907.     move.b    PCMBLACK(a2),d1     ;d1 = Black
  908.     move.b    PCMYELLOW(a2),d4    ;d4 = Yellow
  909.     move.b    PCMMAGENTA(a2),d5    ;d5 = Magenta
  910.     move.b    PCMCYAN(a2),d6        ;d6 = Cyan
  911.     addq.l    #ce_SIZEOF,a2        ;advance to next entry
  912.  
  913.     move.w    (a0)+,sx        ;# of times to use this pixel
  914.  
  915. csx_loop:
  916.     moveq.l #3,d3
  917.     and.w    d2,d3            ;d3 = x & 3
  918.     move.b    0(a3,d3.w),d3        ;d3 = dmatrix[x & 3]
  919.  
  920. black:
  921.     cmp.b    d3,d1            ;render black?
  922.     ble.s    yellow            ;no, try ymc
  923.     bset.b    d7,0(a1,d0.w)        ;set black pixel
  924.     bra.s    csx_end
  925.  
  926. yellow:
  927.     cmp.b    d3,d4            ;render yellow pixel?
  928.     ble.s    magenta         ;no.
  929.     bset.b    d7,0(a4,d0.w)        ;set yellow pixel
  930.  
  931. magenta:
  932.     cmp.b    d3,d5            ;render magenta pixel?
  933.     ble.s    cyan            ;no.
  934.     bset.b    d7,0(a5,d0.w)        ;set magenta pixel
  935.  
  936. cyan:
  937.     cmp.b    d3,d6            ;render cyan pixel?
  938.     ble.s    csx_end         ;no, skip to next pixel.
  939.     bset.b    d7,0(a6,d0.w)        ;clear cyan pixel
  940.  
  941. csx_end
  942.     addq.w    #1,d2            ;x++
  943.     add.w    (SP),d0         ;x3 += #bytes/kolom (MVW)
  944.     subq.w    #1,sx            ;sx--
  945.     bne.s    csx_loop
  946.     subq.w    #1,width        ;width--
  947.     bne.s    cwidth_loop
  948.  
  949. ** correct stack (MVW)
  950.     addq.l    #2,SP
  951.  
  952.     movem.l (sp)+,d7/a5-a6        ;restore regs used
  953.     bra    exit
  954.  
  955. not_color:
  956. ; a0 - PInfo
  957. ; a1 - ptr
  958. ; a2 - colors
  959. ; a3 - dmatrix ptr
  960. ; d0 - y (scratched : d0 = #bytes/kolom (MVW))
  961. ; d6 - bit to set
  962.  
  963. ** # bytes/kolom (MVW)
  964.     move.l    _PED,a4
  965.     moveq    #0,d0
  966.     move    BytesPerRow,d0        ;d0 = #bytes/kolom (MVW)
  967.  
  968.     adda.w    (a2),a1         ;a1 = ptr + colors[0]
  969.     move.w    pi_width(a0),d1     ;d1 = width
  970.     subq.w    #1,d1            ;adjust for dbra
  971.  
  972.     move.w    pi_threshold(a0),d3    ;d3 = threshold, thresholding?
  973.     beq.s    grey_scale        ;no, grey-scaling
  974.  
  975. threshold:
  976. ; a0 - PInfo
  977. ; a1 - ptr
  978. ; a3 - dmatrix ptr
  979. ; d1 - width-1
  980. ; d3 - threshold
  981. ; d6 - bit to set
  982.  
  983.     eori.b    #15,d3            ;d3 = dvalue
  984.     movea.l pi_ColorInt(a0),a2    ;a2 = ColorInt ptr
  985.     move.w    pi_xpos(a0),d2        ;d2 = x
  986.     movea.l pi_ScaleX(a0),a0    ;a0 = ScaleX (sxptr)
  987.     mulu    d0,d2
  988.     adda.l    d2,a1            ;ptr += x * #bytes/kolom (MVW)
  989.  
  990. ; a0 - sxptr
  991. ; a1 - ptr
  992. ; a2 - ColorInt ptr
  993. ; a3 - dmatrix ptr (NOT USED)
  994. ; d1 - width - 1
  995. ; d3 - dvalue
  996. ; d4 - Black
  997. ; d5 - sx
  998. ; d6 - bit to set
  999.  
  1000. twidth_loop:
  1001.     move.b    PCMBLACK(a2),d4     ;d4 = Black
  1002.     addq.l    #ce_SIZEOF,a2        ;advance to next entry
  1003.  
  1004.     move.w    (a0)+,d5        ;d5 = # of times to use this pixel
  1005.  
  1006.     cmp.b    d3,d4            ;render this pixel?
  1007.     ble.s    tsx_end         ;no, skip to next pixel.
  1008.     subq.w    #1,d5            ;adjust for dbra
  1009.  
  1010. tsx_render:                ;yes, render this pixel sx times
  1011.     bset.b    d6,(a1)         ;*(ptr) |= bit;
  1012.  
  1013.     adda.l    d0,a1            ;ptr += #bytes/kolom (MVW)
  1014.     dbra    d5,tsx_render        ;sx--
  1015.     dbra    d1,twidth_loop        ;width--
  1016.     bra.s    exit            ;all done
  1017.  
  1018. tsx_end:
  1019.     mulu    d0,d5
  1020.     adda.l    d5,a1            ;ptr += sx * #bytes/kolom (MVW)
  1021.     dbra    d1,twidth_loop        ;width--
  1022.     bra.s    exit
  1023.  
  1024. grey_scale:
  1025. ; a0 - PInfo
  1026. ; a1 - ptr
  1027. ; a3 - dmatrix ptr
  1028. ************; d0 - y
  1029. ; d1 - width-1
  1030. ; d6 - bit to set
  1031.  
  1032.     movea.l pi_ColorInt(a0),a2    ;a2 = ColorInt ptr
  1033.     move.w    pi_xpos(a0),d2        ;d2 = x
  1034.     movea.l pi_ScaleX(a0),a0    ;a0 = ScaleX (sxptr)
  1035.     mulu    d0,d2
  1036.     adda.l    d2,a1            ;ptr += x * #bytes/kolom (MVW)
  1037.  
  1038. ; a0 - sxptr
  1039. ; a1 - ptr
  1040. ; a2 - ColorInt ptr
  1041. ; a3 - dmatrix ptr
  1042. ; d1 - width
  1043. ; d2 - x
  1044. ; d3 - dvalue (dmatrix[x & 3])
  1045. ; d4 - Black
  1046. ; d5 - sx
  1047. ; d6 - bit to set
  1048.  
  1049. gwidth_loop:
  1050.     move.b    PCMBLACK(a2),d4     ;d4 = Black
  1051.     addq.l    #ce_SIZEOF,a2        ;advance to next entry
  1052.  
  1053.     move.w    (a0)+,d5        ;d5 = # of times to use this pixel
  1054.     subq.w    #1,d5            ;adjust for dbra
  1055.  
  1056. gsx_loop:
  1057.     moveq.l #3,d3
  1058.     and.w    d2,d3            ;d3 = x & 3
  1059.     move.b    0(a3,d3.w),d3        ;d3 = dmatrix[x & 3]
  1060.  
  1061.     cmp.b    d3,d4            ;render this pixel?
  1062.     ble.s    gsx_end         ;no, skip to next pixel.
  1063.  
  1064.     bset.b    d6,(a1)         ;*ptr |= bit
  1065.  
  1066. gsx_end
  1067.     adda.l    d0,a1            ;ptr += #bytes/kolom
  1068.     addq.w    #1,d2            ;x++
  1069.     dbra    d5,gsx_loop        ;sx--
  1070.     dbra    d1,gwidth_loop        ;width--
  1071.  
  1072. exit:
  1073.     movem.l (sp)+,d2-d6/a2-a4    ;restore regs used
  1074.     moveq.l #0,d0            ;flag all ok
  1075.     rts                ;goodbye
  1076.  
  1077. sx    dc.w    0
  1078. width    dc.w    0
  1079.  
  1080.  
  1081. _Density
  1082. LB_7B24    SUBQ.W    #8,A7
  1083.     MOVEQ    #$30,D0
  1084.     MOVE.L    _PD,A0
  1085.     CMP.W    $0A68(A0),D0        papersize
  1086.     BNE.B    LB_7B3A
  1087.     MOVEQ    #$44,D0            
  1088.     ADD.L    D0,D0            136 kolommen
  1089.     DC.W    $0C40
  1090. ;    CMPI.W    #$7050,D0
  1091. LB_7B3A    MOVEQ    #$50,D0            80 kolommen
  1092.     MOVE.L    _PED,A0
  1093.     MOVE.B    D0,$0016(A0)        max.kolommen
  1094.     MOVE.L    $000C(A7),D0
  1095.     LSR.L    #8,D0            door 256
  1096.     MOVE.L    D0,$0004(A7)        density opslaan
  1097.     MOVE.L    D0,D1
  1098.     add.l    d1,d1
  1099.     lea    YDPI,A1
  1100.     move.w    0(A1,d1.l),ped_YDotsInch(a0)
  1101.     lea    BytesTab,a1
  1102.     move.w    0(a1,d1.l),BytesPerRow
  1103.     LEA    XDPI,A1            XDPI
  1104.     ADDA.L    D1,A1
  1105.     MOVE.w    (A1),$0022(A0)        XDPI
  1106.     MOVEQ    #$00,D1
  1107.     MOVE.B    $0016(A0),D1        max.kolommen
  1108.     MOVE.w    (A1),D0            XDPI
  1109.     mulu    d1,d0            XDPI * #kolommen
  1110.     MOVEQ    #$0A,D1
  1111.     BSR.W    LB_7B8C            door 10
  1112.     MOVE.L    D0,$001A(A0)        MaxXdots
  1113.     move.w    ped_YDotsInch(a0),d0    YDPI
  1114.     mulu    #11,d0            YDPI * inches/pagina
  1115.     move.l    d0,ped_MaxYDots(a0)    MaxYdots
  1116.     
  1117.     MOVE.L    $0004(A7),D0
  1118.     LEA    LB_37E4,A0
  1119.     MOVE.B    $00(A0,D0.L),D0        Densitycode
  1120.     ADDQ.W    #8,A7
  1121.     RTS    
  1122.  
  1123. *** divu.l
  1124. LB_7B8C    TST.L    D0
  1125.     BPL.W    LB_7BAE
  1126.     NEG.L    D0
  1127.     TST.L    D1
  1128.     BPL.W    LB_7BA4
  1129.     NEG.L    D1
  1130.     BSR.W    LB_7BBE
  1131.     NEG.L    D1
  1132.     RTS    
  1133. LB_7BA4    BSR.W    LB_7BBE
  1134.     NEG.L    D0
  1135.     NEG.L    D1
  1136.     RTS    
  1137. LB_7BAE    TST.L    D1
  1138.     BPL.W    LB_7BBE
  1139.     NEG.L    D1
  1140.     BSR.W    LB_7BBE
  1141.     NEG.L    D0
  1142.     RTS    
  1143. LB_7BBE    MOVE.L    D2,-(A7)
  1144.     SWAP    D1
  1145.     MOVE.W    D1,D2
  1146.     BNE.W    LB_7BE8
  1147.     SWAP    D0
  1148.     SWAP    D1
  1149.     SWAP    D2
  1150.     MOVE.W    D0,D2
  1151.     BEQ.W    LB_7BD8
  1152.     DIVU.W    D1,D2
  1153.     MOVE.W    D2,D0
  1154. LB_7BD8    SWAP    D0
  1155.     MOVE.W    D0,D2
  1156.     DIVU.W    D1,D2
  1157.     MOVE.W    D2,D0
  1158.     SWAP    D2
  1159.     MOVE.W    D2,D1
  1160.     MOVE.L    (A7)+,D2
  1161.     RTS    
  1162. LB_7BE8    MOVE.L    D3,-(A7)
  1163.     MOVEQ    #$10,D3
  1164.     CMPI.W    #$0080,D1
  1165.     BCC.W    LB_7BF8
  1166.     ROL.L    #8,D1
  1167.     SUBQ.W    #8,D3
  1168. LB_7BF8    CMPI.W    #$0800,D1
  1169.     BCC.W    LB_7C04
  1170.     ROL.L    #4,D1
  1171.     SUBQ.W    #4,D3
  1172. LB_7C04    CMPI.W    #$2000,D1
  1173.     BCC.W    LB_7C10
  1174.     ROL.L    #2,D1
  1175.     SUBQ.W    #2,D3
  1176. LB_7C10    TST.W    D1
  1177.     BMI.W    LB_7C1A
  1178.     ROL.L    #1,D1
  1179.     SUBQ.W    #1,D3
  1180. LB_7C1A    MOVE.W    D0,D2
  1181.     LSR.L    D3,D0
  1182.     SWAP    D2
  1183.     CLR.W    D2
  1184.     LSR.L    D3,D2
  1185.     SWAP    D3
  1186.     DIVU.W    D1,D0
  1187.     MOVE.W    D0,D3
  1188.     MOVE.W    D2,D0
  1189.     MOVE.W    D3,D2
  1190.     SWAP    D1
  1191.     MULU.W    D1,D2
  1192.     SUB.L    D2,D0
  1193.     BCC.W    LB_7C3C
  1194.     SUBQ.W    #1,D3
  1195.     ADD.L    D1,D0
  1196. LB_7C3C    MOVEQ    #$00,D1
  1197.     MOVE.W    D3,D1
  1198.     SWAP    D3
  1199.     ROL.L    D3,D0
  1200.     SWAP    D0
  1201.     EXG    D0,D1
  1202.     MOVE.L    (A7)+,D3
  1203.     MOVE.L    (A7)+,D2
  1204.     RTS    
  1205.  
  1206. LB_7c41    dc.w    0
  1207.  
  1208. *** mulu.l
  1209. LB_7C50    MOVEM.L    D2/D3,-(A7)
  1210.     MOVE.L    D0,D2
  1211.     MOVE.L    D1,D3
  1212.     SWAP    D2
  1213.     SWAP    D3
  1214.     MULU.W    D1,D2
  1215.     MULU.W    D0,D3
  1216.     MULU.W    D1,D0
  1217.     ADD.W    D3,D2
  1218.     SWAP    D2
  1219.     CLR.W    D2
  1220.     ADD.L    D2,D0
  1221.     MOVEM.L    (A7)+,D2/D3
  1222.     RTS    
  1223.  
  1224. **********************************************************************
  1225.     SECTION        printerbss,BSS
  1226.  
  1227. _PD        Ds.L    1
  1228. _PED        Ds.L    1
  1229.     if NeedLibs
  1230. _DOSBase    Ds.L    1
  1231. _GfxBase    Ds.L    1
  1232. _IntuitionBase    Ds.L    1
  1233.     endif
  1234.  
  1235.     SECTION        printerdata,DATA
  1236.  
  1237. _CommandStrings
  1238. LB_32D0    DC.B    $1B,'@',$00        aRIS
  1239. LB_32D6    DC.B    $FF,$00            aRIN
  1240.     DC.B    $0A,$00            aIND
  1241.     DC.B    $0D,$0A,$00        aNEL (CR LF)
  1242.     DC.B    $FF,$00            aRI  (reverse LF)
  1243.     DC.B    $1B,'5',$1B,'-',$FE,$1B,'F',$1B,'H',0  aSGR normale tekenset
  1244.     dc.b    $1B,'4',$00        cursief aan
  1245.     dc.b    $1B,'5',0        - uit
  1246.     DC.B    $1B,'-',$01,$00        onderlijnd aan
  1247.     dc.b    $1B,'-',$FE,$00        - uit
  1248.     dc.b    $1B,'E',$00        vet aan
  1249.     dc.b    $1B,'F',0        - uit
  1250.     DC.B    $FF,$00,$FF,$00        voorgrond/achtergrond-kleur
  1251.     dc.b    $1B,'P'            normale grootte
  1252.     DC.B    $12,$1B,'W',$FE,$00
  1253.     dc.b    $1B,'M'            elite aan
  1254.     DC.B    $12,$1B,'W',$FE,$00
  1255.     dc.b    $1B,'P',0        - uit
  1256.     DC.B    $0F,$1B,$50,$1B,$57,$FE,0    verkleind aan
  1257.     DC.B    $12,$00                - uit
  1258.     dc.b    $1B,'W',1,0        vergroot aan
  1259.     DC.B    $1B,'W',$FE,0        - uit
  1260.     dc.b    $1B,'q',2,0        schaduw aan
  1261.     DC.B    $1B,'q',$FE,0        - uit
  1262.     dc.b    $1B,'G',0        dubbeldik aan
  1263.     DC.B    $1B,'H',0        - uit
  1264.     dc.b    $1B,'x',1,0        NLQ aan
  1265.     DC.B    $1B,'x',$FE,0        Draft
  1266.     dc.b    $1B,'S',$FE,0        superscript aan
  1267.     DC.B    $1B,'T',0        - uit
  1268.     dc.b    $1B,'S',1,0        subscript aan
  1269.     DC.B    $1B,'T',0        - uit
  1270.     dc.b    $1B,'T',0        normaliseer regel
  1271.     DC.B    $FF,$00,$FF,$00        PLU/PLD
  1272.     dc.b    $1B,'R',$FE,$00
  1273.     DC.B    $1B,'R',$01,$00,$1B,'R',$02,$00
  1274.     DC.B    $1B,'R',$03,$00,$1B,'R',$04,$00
  1275.     DC.B    $1B,'R',$05,$00,$1B,'R',$06,$00
  1276.     DC.B    $1B,'R',$07,$00,$1B,'R',$08,$00
  1277.     DC.B    $1B,'R',$09,$00,$1B,'R',$0A,$00
  1278.     DC.B    $1B,'p','1',0        prop aan
  1279.     dc.b    $1B,'p','0',0        - uit
  1280.     DC.B    $FF,$00            - wissen
  1281.     dc.b    $FF,$00,$FF,$00,$FF,$00        automatisch uitlijnen
  1282.     DC.B    $FF,$00,$FF,$00,$FF,$00,$FF,$00        (niet ondersteund)
  1283.     DC.B    $1B,'0',0            8lpi
  1284.     dc.b    $1B,'2',0            6lpi
  1285.     DC.B    $ff,0                aSLPP lengte pagina in regels
  1286.     dc.b    $1B,'N',0            perforatie skip (obsolete)
  1287.     DC.B    $1B,'O',0            - uit
  1288.     dc.b    $FF,$00,$FF,$00            linker/rechter-kantlijn
  1289.     DC.B    $FF,$00,$FF,$00            boven/onder-kantlijn
  1290.     dc.b    $FF,$00,$FF,$00            onder/boven+linker/rechter-kl
  1291.     DC.B    $FF,$00                kantlijnen wissen
  1292.     dc.b    $FF,$00,$FF,$00            stel hori/verti-tab in
  1293.     dc.b    $FF,$00                horitab wissen
  1294.     DC.B    $1B,'D',$FE,0            wis alle hori-tabs
  1295.     dc.b    $FF,$00                vertitab wissen
  1296.     dc.b    $1B,'B',$fe,0            alle verti-tab wissen
  1297.     DC.B    $1B,'D',$FE,$1B,'B',$FE,0    alle tabs wissen
  1298.     DC.B    $1B,'D',$08,$10,$18,$20        stel standaard hori-tabs in
  1299.     DC.B    $28,$30,$38,$40,$48,$50,$58,$FE,0
  1300.     DC.B    $FF,$00,$FF,$00            extend/raw
  1301.     
  1302. _ExtendedStrings
  1303. LB_3522    DC.B    $20,$00,$AD,$00,$BD,$00
  1304.     DC.B    $9C,$00,$CF,$00,$BE,$00,$DD,$00
  1305.     DC.B    $F5,$00,$F9,$00,$B8,$00,$A6,$00,$AE,$00
  1306.     DC.B    $AA,$00,$F0,$00,$A9,$00,$EE,$00
  1307.     DC.B    $F8,$00,$F1,$00,$fd,$00,$FC,$00
  1308.     DC.B    $EF,$00,$E6,$00,$F4,$00,$FA,$00
  1309.     DC.B    $F7,$00,$FB,$00,$A7,0
  1310.     DC.B    $AF,$00,$AC,$00
  1311.     DC.B    $AB,$00,$F3,$00,$A8,$00,$B7,$00
  1312.     DC.B    $B5,$00,$B6,$00,$C7,$00,$8E,$00
  1313.     DC.B    $8F,$00,$92,$00,$80,$00,$D4,$00
  1314.     DC.B    $90,$00,$D2,$00,$D3,$00,$DE,$00
  1315.     DC.B    $D6,$00,$D7,$00,$D8,$00,$D1,$00
  1316.     DC.B    $A5,$00,$E3,$00,$E0,$00,$E2,$00
  1317.     DC.B    $E5,$00,$99,$00,$9E,$00,$9D,$00
  1318.     DC.B    $EB,$00,$E9,$00,$EA,$00,$9A,$00
  1319.     DC.B    $ED,$00,$E8,$00,$E1,$00,$85,$00
  1320.     DC.B    $A0,$00,$83,$00,$C6,$00,$84,$00
  1321.     DC.B    $86,$00,$91,$00,$87,$00,$8A,$00
  1322.     DC.B    $82,$00,$88,$00,$89,$00,$8D,$00
  1323.     DC.B    $A1,$00,$8C,$00,$8B,$00,$D0,$00
  1324.     DC.B    $A4,$00,$95,$00,$A2,$00,$93,$00
  1325.     DC.B    $E4,$00,$94,$00,$F6,$00,$9B,$00
  1326.     DC.B    $97,$00,$A3,$00,$96,$00,$81,$00
  1327.     DC.B    $EC,$00,$E7,$00,$98,$00
  1328.     even
  1329. ** marge zetten
  1330. initmarge
  1331.     DC.B    $1B,'l'
  1332. LB_3773    dc.b    'L',$1B,'Q'
  1333. LB_3776    dc.b    'R'
  1334. initmargelen=*-initmarge
  1335. InitString
  1336.     dc.b    $1B,'!',0    10 cpi/normaal
  1337.     dc.b    $1b,'x',0    draft
  1338.     DC.B    $1B,$54        super/sub-script uit
  1339.     DC.B    $1B,'2',$0D    6lpi, CR
  1340. InitStringlen=*-InitString
  1341.  
  1342. ** onder/boven-marges
  1343. initTmarg dc.b    27,'(c',4,0
  1344.  
  1345. ISOColor    dc.b    $00,$05,$06,$04
  1346.         DC.B    $03,$01,$02,$00
  1347.  
  1348. ** initprinter voor grafiek en terug naar tekst
  1349. Startbuf
  1350.     DC.B    $1B
  1351. LB_37A1    dc.b    'P'    
  1352. LB_37A2    dc.b    $12,$1B,'W',$00,$1B,'l'
  1353. LB_37A8    DC.B    'L',$1B,'Q'
  1354. LB_37AB    dc.b    'R',$0D,$1B,'U'
  1355. LB_37AF    dc.b    '1'
  1356. Startbuflen=*-Startbuf
  1357. formfeed DC.B    $0C
  1358.     even
  1359. XDPI    DC.w    90,90            XDPI
  1360.     dc.w    120
  1361.     dc.w    180
  1362.     dc.w    360
  1363.     dc.w    180
  1364.     dc.w    360
  1365.     DC.w    360
  1366.  
  1367. YDPI    dc.w    180,180
  1368.     dc.w    180
  1369.     dc.w    180
  1370.     dc.w    180
  1371.     dc.w    360
  1372.     dc.w    360
  1373.     dc.w    360
  1374.  
  1375. LB_37E4    DC.B    '&','&','!',"'"            densitycodes
  1376.     DC.B    '(','G','H','I'
  1377.  
  1378. BytesTab    dc.w    3,3,3,3
  1379.         dc.w    3,6,6,6
  1380.  
  1381.     section    printerbss,BSS
  1382.  
  1383. RowSize        ds.w    1
  1384. ColorSize    ds.w    1
  1385. BufSize        ds.w    1
  1386. TotalBufSize    ds.w    1
  1387. dataoffset    ds.w    1
  1388.  
  1389. densitycode    ds.w    1
  1390.  
  1391. colors            ; 4 ints
  1392. LB_37F8    Ds.w    1
  1393. LB_37FA    ds.w    1
  1394. LB_37FC    ds.w    1
  1395. LB_37FE    ds.w    1
  1396. colorcodes        ; 4 ints
  1397. LB_3800    Ds.w    1
  1398. LB_3802    ds.w    1
  1399. LB_3804    ds.w    1
  1400. LB_3806    ds.w    1
  1401.  
  1402. NumColorBufs    Ds.w    1
  1403. BytesPerRow    ds.w    1
  1404.     
  1405. _CommandTable        ds.l    78
  1406. _ExtendedCharTable    ds.l    96
  1407.     END
  1408.  
  1409.